home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #3 / Amiga Plus CD - 2002 - No. 03.iso / AmiSoft / Dev / Lang / Nano.lha / nano / prog / date.n < prev    next >
Encoding:
Text File  |  2002-08-20  |  3.8 KB  |  247 lines

  1. //  This program finds the weekday to a date. The data is taken from
  2. //  a math-book.
  3. //
  4. //  ranges:
  5. //  century:    15 - 32
  6. //  year:        0 - 99
  7. //  month:       1 - 12
  8. //  day:         1 - 31
  9. //
  10. //
  11.  
  12. #include <spl_date.dec>
  13.  
  14. int days[7][5]; int centurys[5][7]; int scenturys[4]; int years[7][18];
  15. int months[7][7]; int monthd[7][3]; int data[7][7];
  16.  
  17. int century; int year; int month; int day; int dayname; int row; int col;
  18. int i; int j; int x; int ok; int data1; int data2; int leapyear;
  19. int ch1; int ch2;
  20. int monday; int tuesday; int wednesday; int thursday; int friday;
  21. int saturday; int sunday; int null;
  22.  
  23. string date[12];
  24.  
  25. #include <datedata.n>
  26.  
  27. lab start;
  28.  
  29. leapyear = 0;
  30. print /n;
  31. ok = 0;
  32. while ok != 1;
  33.     date = "";
  34.     input "date: dd.mm.yyyy   (RETURN to exit): " date;
  35.     if date = ""; exit; endif;
  36.     call spl_date (day, month, year, century, date);
  37.     if day != -1;
  38.         ch1 = day >= 1; ch2 = day <= 31;
  39.         ok = ch1 and ch2;
  40.         if ok != 1;
  41.             print "day range: 1 - 31", /n;
  42.         endif;
  43.  
  44.         ch1 = month >= 1; ch2 = month <= 12;
  45.         ok = ch1 and ch2;
  46.         if ok != 1;
  47.             print "month range: 1 - 12", /n;
  48.         endif;
  49.  
  50.         ch1 = year >= 0; ch2 = year <= 99;
  51.         ok = ch1 and ch2;
  52.         if ok != 1;
  53.             print "year range: 0 - 99", /n;
  54.         endif;
  55.  
  56.         ch1 = century >= 15; ch2 = century <= 32;
  57.         ok = ch1 and ch2;
  58.         if ok != 1;
  59.             print "century range: 15 - 32", /n;
  60.         endif;
  61.     endif;
  62. wend;
  63.  
  64. ok = 0;
  65. i = 0;
  66. while ok = 0;
  67.     j = 0;
  68.     while j <= 4;
  69.         x = days[i][j];
  70.         if x = day;
  71.             row = i;
  72.             ok = 1;
  73.         endif;
  74.         inc j;
  75.     wend;
  76.  
  77.     if i < 6;
  78.         inc i;
  79.     endif;
  80.     if i > 6;
  81.         ok = 1;
  82.     endif;
  83. wend;
  84.  
  85.  
  86. // check if leapyear
  87.  
  88. i = 0;
  89. while i <= 3;
  90.     x = scenturys[i];
  91.     if x = century;
  92.         if year = 0;
  93.             leapyear = 1;
  94.         endif;
  95.     endif;
  96.     inc i;
  97. wend;
  98.  
  99. x = year mod 4;
  100. if x = 0;
  101.     leapyear = 1;
  102. endif;
  103.  
  104. ok = 0;
  105. i = 0;
  106. while ok = 0;
  107.     j = 0;
  108.     while j <= 2;
  109.         x = monthd[i][j];
  110.         if x = month;
  111.             col = i;
  112.             ok = 1;
  113.         endif;
  114.         inc j;
  115.     wend;
  116.  
  117.     if i < 6;
  118.         inc i;
  119.     endif;
  120.     if i > 6;
  121.         ok = 1;
  122.     endif;
  123. wend;
  124.  
  125. if leapyear;
  126.     if month = 1;
  127.         col = 1;
  128.     endif;
  129.     if month = 2;
  130.         col = 3;
  131.     endif;
  132. endif;
  133.  
  134. data1 = months[row][col];
  135.  
  136. ok = 0;
  137. i = 0;
  138. while ok = 0;
  139.     j = 0;
  140.     while j <= 17;
  141.         x = years[i][j];
  142.         if x = year;
  143.             row = i;
  144.             ok = 1;
  145.         endif;
  146.         inc j;
  147.     wend;
  148.  
  149.     if i < 6;
  150.         inc i;
  151.     endif;
  152.     if i > 6;
  153.         ok = 1;
  154.     endif;
  155. wend;
  156.  
  157. ok = 0;
  158. i = 0;
  159. while ok = 0;
  160.     j = 0;
  161.     while j <= 5;
  162.         x = centurys[i][j];
  163.         if x = century;
  164.             col = j;
  165.             ok = 1;
  166.         endif;
  167.         inc j;
  168.     wend;
  169.  
  170.     if i < 4;
  171.         inc i;
  172.     endif;
  173.     if i > 4;
  174.         ok = 1;
  175.     endif;
  176. wend;
  177.  
  178. data2 = data[row][col];
  179. dayname = data1 + data2;
  180.  
  181. ok = 0;
  182. i = 0;
  183. while ok = 0;
  184.     j = 0;
  185.     while j <= 4;
  186.         x = days[i][j];
  187.         if x = dayname;
  188.             row = i;
  189.             ok = 1;
  190.         endif;
  191.         inc j;
  192.     wend;
  193.  
  194.     if i < 6;
  195.         inc i;
  196.     endif;
  197.     if i > 6;
  198.         ok = 1;
  199.     endif;
  200. wend;
  201.  
  202. dayname = row;
  203.  
  204. print /n;
  205. if day < 10;
  206.     print null;
  207. endif;
  208. print day, ".";
  209.  
  210. if month < 10;
  211.     print null;
  212. endif;
  213. print month, ".";
  214.  
  215. print century;
  216. if year < 10;
  217.     print null;
  218. endif;
  219. print year, /s2;
  220.  
  221. if dayname = sunday;
  222.     printvn sunday;
  223. endif;
  224. if dayname = monday;
  225.     printvn monday;
  226. endif;
  227. if dayname = tuesday;
  228.     printvn tuesday;
  229. endif;
  230. if dayname = wednesday;
  231.     printvn wednesday;
  232. endif;
  233. if dayname = thursday;
  234.     printvn thursday;
  235. endif;
  236. if dayname = friday;
  237.     printvn friday;
  238. endif;
  239. if dayname = saturday;
  240.     printvn saturday;
  241. endif;
  242.  
  243. print /n2;
  244. goto start;
  245.  
  246. #include <spl_date.sub>
  247.